package yws.mvcrumen.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import yws.mvcrumen.domain.User;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
@RequestMapping(path = "/next")
public class UserController {

    @RequestMapping(path = "/tiaozhuan")
    public String tiaozhaun(){
        return "response";
    }


    @RequestMapping(path = "/testString")
    public String testString(Model model){
        System.out.println("testString方法执行了");
        //模拟从数据库中查询出user对象
        User user=new User();
        user.setUname("张三");
        user.setAge(55);
        //model对象
        model.addAttribute("user",user);
        return "响应返回值是String";
    }

    /**
     * 请求转发一次请求，不用编写项目名称
     * @param request
     * @param response
     * @throws Exception
     */
    @RequestMapping(path = "/testVoid")
    //如果没有返回值则就会默认的为请求路径下的jsp或者采用下面的形式
    public void testVoid(HttpServletRequest request, HttpServletResponse response,Model model)throws Exception{
        System.out.println("testVoid方法执行了");
        //1.编写请求转发的程序,以为自己手动转发的话不会执行视图解析器，所以说需要自己吧转发路径写上
        request.getRequestDispatcher("/WEB-INF/pages/响应返回值是Void.jsp").forward(request,response);

        //2.重定向，不能访问到/WEB-INF/pages下面的页面，只能说在webapp目录下例如index.jsp上面  request.getContextPath()是项目名称
        //response.sendRedirect(request.getContextPath()+"/success1.jsp");

        //3.直接会进行响应
        //设置中文乱码
        /*
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().print("hello");*/
    }
    @RequestMapping(path = "/testForwardOrRedirect")
    public String testForwardOrRedirect(){
        System.out.println("testForwardOrRedirect方法执行了...");
        //1.请求的转发 forward:是固定语法，后面的内容是因为不能使用视图解析器，所以说自己写请求转发的路径
        //return "forward:/WEB-INF/pages/success.jsp";

        //2.重定向 ，因为无法访问到/WEB-INF/pages/目录则采用index.jsp   不需要加项目名称，底层已经实现了
        return "redirect:/index.jsp";
    }


    /**
     * 模拟异步请求响应
     */
    @RequestMapping("/testAjax")
    public @ResponseBody User testAjax(@RequestBody User user){
        System.out.println("testAjax方法执行了...");
        //客户端发送Ajax的请求，传的是json字符串，后端吧json字符串封装到user对象中
        System.out.println(user);
        //做一个响应，模拟查询数据库
        user.setUname("杨万顺");
        user.setAge(21);
        //作响应，
        return user;//返回时一个对象，如要前端收到的是一个json对象需要加上@ResponseBody
    }
}

















